package com.chushouya.controller.product.admin;

import com.chushouya.common.constant.ServiceType;
import com.general.framework.core.enums.BusinessType;
import com.general.framework.core.schema.PageResult;
import com.general.framework.core.schema.Response;
import com.general.framework.web.annotations.Log;
import com.general.framework.web.annotations.RepeatSubmit;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemDetailDTO;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemListDTO;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemQuery;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemSaveDTO;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemUpdateDTO;
import com.chushouya.product.service.admin.EvaluateItemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@Api(tags = ServiceType.PLATFORM + "估价项目管理")
@RestController
@RequestMapping(ServiceType.PLATFORM + "/evaluateItem")
public class EvaluateItemController {

    @Resource
    private EvaluateItemService evaluateItemService;

    @ApiOperation("获取估价项目分页列表")
    @GetMapping("/page")
    public Response<PageResult<EvaluateItemListDTO>> page(EvaluateItemQuery query) {
        return Response.success(evaluateItemService.selectEvaluateItemPageResult(query));
    }

    @ApiOperation("获取估价项目列表")
    @GetMapping("/list")
    public Response<List<EvaluateItemListDTO>> list(EvaluateItemQuery query) {
        return Response.success(evaluateItemService.selectEvaluateItemList(query));
    }

    @ApiOperation("根据ID获取估价项目详细信息")
    @GetMapping("/detail")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "evaluateItemId", value = "估价项目ID", required = true),
    })
    public Response<EvaluateItemDetailDTO> getDetail(Long evaluateItemId) {
        return Response.success(evaluateItemService.getEvaluateItemDetail(evaluateItemId));
    }

    @ApiOperation("新增估价项目")
    @Log(businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @RepeatSubmit
    public Response<Long> add(@Validated @RequestBody EvaluateItemSaveDTO evaluateItem) {
        return Response.success(evaluateItemService.addEvaluateItem(evaluateItem));
    }

    @ApiOperation("修改估价项目")
    @Log(businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    public Response<Long> edit(@Validated @RequestBody EvaluateItemUpdateDTO evaluateItem) {
        return Response.success(evaluateItemService.editEvaluateItem(evaluateItem));
    }

    @ApiOperation("修改估价项目状态")
    @Log(businessType = BusinessType.UPDATE)
    @PostMapping("/editStatus")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "evaluateItemId", value = "估价项目ID", required = true),
            @ApiImplicitParam(name = "status", value = "状态 0禁用 1启用", required = true)
    })
    public Response<Long> editStatus(Long evaluateItemId, Integer status) {
        return Response.success(evaluateItemService.editEvaluateItemStatus(evaluateItemId, status));
    }

    @ApiOperation("删除估价项目")
    @Log(businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "evaluateItemId", value = "估价项目ID", required = true)
    })
    public Response<Void> remove(Long evaluateItemId) {
        evaluateItemService.removeEvaluateItem(evaluateItemId);
        return Response.success();
    }

    @ApiOperation("根据分类ID获取估价项目列表")
    @GetMapping("/listByCategoryId")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "categoryId", value = "分类ID", required = true)
    })
    public Response<List<EvaluateItemListDTO>> listByCategoryId(Long categoryId) {
        return Response.success(evaluateItemService.selectEvaluateItemListByCategoryId(categoryId));
    }
}
